home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / bipl.zip / PROCS.ZIP / NXTPRIME.ICN < prev    next >
Text File  |  1992-09-28  |  1KB  |  37 lines

  1. ############################################################################
  2. #
  3. #    File:     nxtprime.icn
  4. #
  5. #    Subject:  Procedure to find the next prime
  6. #
  7. #    Author:   Gregg Townsend
  8. #
  9. #    Date:     November 10, 1991
  10. #
  11. ###########################################################################
  12. #
  13. #    nxtprime(n) returns the next prime number beyond n.
  14. #
  15. ############################################################################
  16.  
  17. procedure nxtprime(n)
  18.    local d
  19.    static step, div
  20.    initial {
  21.       step := [1,6,5,4,3,2,1,4,3,2,1,2,1,4,3,2,1,2,1,4,3,2,1,6,5,4,3,2,1,2]
  22.       div := [7]            # list of known primes
  23.       }
  24.    n := integer (n) | runerr (101, n)
  25.    if n < 7 then            # handle small primes specially
  26.       return n < (2 | 3 | 5 | 7)
  27.    repeat {
  28.       n +:= step [n % 30 + 1]        # step past multiples of 2, 3, 5
  29.       every (d := !div) | |put(div,d:=nxtprime(d)) do {  # get test divisors
  30.      if n % d = 0 then        # if composite, try a larger candidate
  31.         break
  32.      if d * d > n then        # if not divisible up to sqrt, is prime
  33.         return n
  34.      }
  35.       }
  36.    end
  37.